/**
 * 登录相关的操作
 */
import { genTestUserSig } from "@/utils/generateTestUserSig.js";
import store from "@/store/index.js";
import tim from "@/utils/tim.js";
import trtcCalling from "@/utils/trtc.js";
import { Message } from "element-ui";

/*

登录流程：
	因为腾讯im中没有密码，只有sign就可以，现在登录账号和密码又自定义接入系统维护，所以在登录时，首先请求业务系统，校验账号和密码，
	校验通过后，直接到im中生成sign进行登录。


*/

export async function login(userId = "", userPassword = "") {
  if (userId && userPassword) {
    //执行业务系统的校验工作，校验后返回内容，数据格式{status:0,msg:'成功'} //status 0 status -1 失败 成功 msg 返回错误信息

    let resLoginCheck = {
      status: 0,
      msg: "ok"
    };

    if (!resLoginCheck || resLoginCheck.status !== 0) {
      Message.error(`${resLoginCheck.msg}`);
      return;
    }

    //首先退出一下 防止是直接清除缓存的操作
    await logout();

    if (resLoginCheck && resLoginCheck.status === 0) {
      //执行腾讯im的登录
      //1 生成sign
      await imLogin(userId);
    }
  }
}

//执行im的登录
export async function imLogin(userId = "") {
  try {
    let { userSig } = genTestUserSig(userId);

    let loginToken = {
      userID: userId,
      userSig: userSig
    };

    await tim.login(loginToken);
    await trtcCalling.login(loginToken);
  } catch (err) {
    console.log("腾讯im登录失败", err);
    Message.error("登录失败!");
  }
}

//退出登录的操作
export async function logout() {
  try {
    await tim.logout();
    await trtcCalling.logout();
  } catch (err) {
    console.error("退出登录失败", err);
  }
}

/**
 * 登录成功操作
 */
export async function loginSuccess() {
  const myData = await tim.getMyProfile();

  if (myData && myData.data && myData.data.userID) {
    //登录成功
    store.commit("imStore/LOGIN_SUCCESS", myData.data || []);
  }
}

/**
 * 退出登录
 */
export async function logoutSuccess() {
  store.commit("imStore/LOGOUT_SUCCESS");
}
